本文介绍如何在本地制作Docker镜像,并以镜像方式将Go应用部署到Serverless应用引擎SAE(Serverless App Engine)。
前提条件
- 安装Docker。
- 开通阿里云SAE服务。
- 开通阿里云容器镜像ACR服务并创建实例,个人版实例和企业版实例皆可。
步骤一:准备项目
- 下载Demo。Demo内的Dockerfile内容如下:
# Golang版本;Alpine镜像的体积较小。 FROM golang:1.16.6-alpine3.14 as builder # 替换Alpine镜像,方便安装构建包。 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 安装构建阶段的依赖。 RUN apk --update add gcc libc-dev upx ca-certificates && update-ca-certificates # 将代码复制到构建镜像中。 # 注意地址不要在GOPATH中。 ADD . /workspace WORKDIR /workspace # 挂载构建缓存。 # GOPROXY防止下载失败。 RUN --mount=type=cache,target=/go \ env GOPROXY=https://goproxy.cn,direct \ go build -buildmode=pie -ldflags "-linkmode external -extldflags -static -w" \ -o /workspace/gin-hello-world # 运行时镜像。 # Alpine兼顾了镜像大小和运维性。 FROM alpine:3.14 EXPOSE 8080 # 方便运维人员安装需要的包。 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 创建日志目录等。 # RUN mkdir /var/log/onepilot -p && chmod 777 /var/log/onepilot && touch /var/log/onepilot/.keep # 复制构建产物。 COPY --from=builder /workspace/gin-hello-world /app/ # 指定默认的启动命令。 CMD ["/app/gin-hello-world"]
- 在Demo所在目录,执行以下命令,构建镜像。
docker build . -t gin-example
- 本地验证。
步骤二:制作镜像
- 在容器镜像服务控制台创建镜像仓库。个人版和企业版实例均适用本文的操作,本文以个人版实例为例。具体操作,请参见以下文档:
- 个人版实例:构建仓库与镜像
- 企业版实例:使用企业版实例构建镜像
- 构建并推送镜像。成功推送后,您可以登录容器镜像服务控制台,在目标镜像仓库的镜像版本页面查看推送的版本。
步骤三:部署镜像
- 创建Go应用。在应用部署配置页签,技术栈语言需选择其它语言,应用部署方式需选择镜像。具体操作,请参见在SAE控制台使用镜像部署多语言应用。说明 除创建新应用外,您还可以修改现有应用的配置镜像。具体操作,请参见升级应用。
- 为Go应用绑定公网SLB。绑定完成后,您可以在应用访问设置区域查看公网访问地址。
- 验证结果。按照http://slbip:port/的格式,在浏览器地址栏输入步骤2设置的公网地址并回车。结果如下:
更多信息
如果您不想每次都通过手动方式构建、推送镜像,并部署应用,可以对接开源的Jenkins或者阿里云云效。具体信息,请参见以下文档: